CASE-Anweisung in ST

Syntax
CASE ... OF
  ...
  ELSE ...
END_CASE
Bedeutung

Mit der CASE-Anweisung bestimmen Sie, dass eine Gruppe von Anweisungen dann ausgeführt wird, falls der ausgewertete Wert des Selektors (nach CASE eingegeben) der Marke entspricht, die für diese Gruppe von Anweisungen eingegeben ist. Falls der Wert des Selektors keiner der Marken entspricht, wird entweder keine Anweisung ausgeführt oder jene Gruppe von Anweisungen ausgeführt, die dem Schlüsselwort ELSE folgt.

Einschränkung

Sie dürfen nur solche →Ausdrücke für den Selektor eingeben, die als Ausdruck vom →allgemeinen Datentyp ANY_INT ausgewertet werden können.

Eine Marke darf eine oder mehrere ganzzahlige →Literale/→Variablen, Aufzählungswerte oder Bereiche sein und muss als →konstanter Wert zur Laufzeit ausgewertet werden. Der Datentyp der Marken muss in den Datentyp des Selektors implizit konvertierbar sein.

Detail-Erläuterungen zu CASE

Teil der CASE-Anweisung

Erläuterung

CASE selector OF
  1: statements-A;
  2, 3: statements-B;
  4..6, 7: statements-C;
  ... 

 

  • Falls der Wert des Selektors der Marke 1 entspricht (also: bei Wert = 1), setzt die Ausführung mit dem Anweisungsblock statements-A fort. Nach Ausführung des Anweisungsblocks wird hinter END_CASE fortgesetzt.

  • Bei Wert = 2 oder 3 setzt die Ausführung mit dem Anweisungsblock statements-B fort. Nach Ausführung des Anweisungsblocks wird hinter END_CASE fortgesetzt.

  • Bei Wert = 4, 5, 6 oder 7 setzt die Ausführung mit dem Anweisungsblock statements-C fort. Nach Ausführung des Anweisungsblocks wird hinter END_CASE fortgesetzt.

Jeder Anweisungsblock darf beliebig viele Anweisungen enthalten. Sie dürfen beliebig viele Marken und Anweisungblöcke einfügen. Falls Sie die gleichen Werte für Marken eingeben, kommt der zuerst eingegebene Anweisungsblock zur Ausführung, da Neuron Power Engineer von oben nach unten vergleicht.

ELSE
statements-n;

 

Der Anweisungsblock hinter ELSE wird nur ausgeführt, wenn keine der Marken mit dem Wert des Selektors übereinstimmt. Der Anweisungsblock darf beliebig viele Anweisungen enthalten. Nach Ausführung des Anweisungsblocks wird hinter END_CASE fortgesetzt.

Sie dürfen den ELSE-Teil entfallen lassen.

END_CASE;

 

Damit wird die CASE-Anweisung beendet.

 
Beispiel
FUNCTION_BLOCK ExampleIfAndCaseDocumentation
  VAR
      up : BOOL;
      count : INT;
      notify : STRING[1000];
  END_VAR
  VAR CONSTANT
      neg100 : int := -100;
      neg1 : int := -1;
  END_VAR
   
  IF up THEN          /* If 'up' = 'TRUE', counter counts up. */
      count := count + 1;
  ELSE
      count := count - 1;
  END_IF;
       
  CASE count OF      /* If 'count' is in the respective range of values, 'notify' displays the appropriate text. */
      0            : notify := 'Counter is 0.';
      1..100       : notify := 'Counter is in the range between 1 and 100.';    /* This label defines a subrange with integer values. */
      neg100..neg1 : notify := 'Counter is in the range between -100 and -1.';  /* This label defines a subrange with constant variables. */
  ELSE
      notify := 'Counter is more than 100 or less than -100.';
  END_CASE;
END_FUNCTION_BLOCK